﻿using System.Data;
using System.Data.SqlClient;
using KZ.Exception;
using KZ.Utilities;
using Process.Entities;

namespace Process.DAL
{
    public class SessionDAL
    {
        private static SessionENT CreateSessionFromReader(IDataReader reader)
        {
            SessionENT item = new SessionENT();

            if (!reader.IsDBNull(reader.GetOrdinal(SessionColumns.SessionID.ToString()))) item.SessionID = Utility.StringParse(reader[SessionColumns.SessionID.ToString()]);
			if (!reader.IsDBNull(reader.GetOrdinal(SessionColumns.PartnerID.ToString()))) item.PartnerID = Utility.StringParse(reader[SessionColumns.PartnerID.ToString()]);
			if (!reader.IsDBNull(reader.GetOrdinal(SessionColumns.LastAccessDate.ToString()))) item.LastAccessDate = Utility.DateTimeParse(reader[SessionColumns.LastAccessDate.ToString()]);

            return item;
        }

        public static SessionENT GetSessionByID(string sessionID)
        {
            try
            {
                SessionENT session = new SessionENT();

                DataAccessHelper.AddParameter("SessionID", SqlDbType.VarChar, sessionID);

                using (IDataReader reader = DataAccessHelper.ExecuteQuery("procSessionGetByID"))
                {
                    while (reader.Read())
                    {
                        session = CreateSessionFromReader(reader);
                    }
                }

                return session;
            }
            catch (SqlException)
            {
                throw new DataAccessException("Có lỗi trong quá trình lấy thông tin nhà cung cấp.");
            }
            finally
            {
                DataAccessHelper.ClearCommand();
            }
        }

        public bool InsertSession(SessionENT session)
        {
            try
            {
                DataAccessHelper.AddParameter("SessionID", SqlDbType.VarChar, session.SessionID);
                DataAccessHelper.AddParameter("PartnerID", SqlDbType.VarChar, session.PartnerID);

                if (DataAccessHelper.ExecuteNonQuery("procSessionInsert") > 0)
                {
                    return true;
                }
                throw new DataAccessException("Có lỗi trong quá trình thêm mới phiên làm việc.");
            }
            catch (SqlException)
            {
                throw new DataAccessException("Có lỗi trong quá trình thêm mới phiên làm việc.");
            }
            finally
            {
                DataAccessHelper.ClearCommand();
            }
        }
    }
}
